Ethernet networks and the like for providing data communication among a plurality of computers are well-known. Such networks facilitate the transfer of data files, audio information and video information, as well as any other information which may be represented, in binary form, among the plurality of computers.
Networks can be conveniently divided into two broad categories, based upon their size. A local area network (LAN) is a group of computers which is connected so as to facilitate the sharing of applications, data and peripherals. Local area networks are generally confined to a single building or a small group of buildings.
A wide area network (WAN) is made up of a plurality of LANs which is connected together so as to facilitate communication therebetween. A WAN may cover a city, a state, a country or even be international in scope. The Internet is an example of a WAN that includes more than 2,000 separate packet-switched networks that are located all over the world.
The popularity of networks, such as the Internet, has increased the desire for additional network services, such as network telephony. The vast, high bandwidth network provides an ideal medium for audio communications. The nature of such telephone devices is to process voice signals that might come in over the network, typically as digital packets of information or the like. To process such signals, various computing and processing devices are used, typically in the form of integrated circuit configurations.
Memory is a component that is used by computing devices to store data and/or code to be used in processing data. Integrated solid-state processing devices generally have an area of associated memory on the same chip substrate where the processing components are formed. Such memory is generally formed close to the processing components in order to enhance the overall speed and efficiency of the device. Memory, however, often takes up more room on an integrated device than processing components, with higher storage capacities generally requiring more space on the chip. Hence, by incorporating a sufficient amount of memory on the same chip, the size of the chip layout is greatly increased. This is often not favorable, as larger chip layouts are more expensive to produce, take up more room in compact devices, and often draw more power. It is therefore desirable to reduce the amount of memory on certain processing devices. However, by reducing the memory, the amount of code and/or data that can be used on a given device is also reduced.
One resource intensive form of processing to be performed by certain integrated computer devices includes digital signal processing (DSP). DSP generally refers to various techniques for improving the accuracy and reliability of digital communications. A description of the general theory behind DSP can be quite complex and is not included here, but is well known in the art. In particular, DSP is used to clarify, or standardize, the levels or states of a digital signal. A DSP circuit is able to differentiate between human-made signals, which are orderly, and noise, which is inherently chaotic. The number of MIPS (or millions of instructions per second) serves as a general measure of the computing performance of such a device. Accordingly, certain specialized DSP devices exist which are configured to perform signal processing in a more efficient manner than generalized processors. Signal processing communication devices often include a programmable DSP for processing varying levels of MIPS. A DSP processor is generally used for intensive real-time signal processing operations.
The code (or program) used by a processor can be written in a higher level language (i.e., C++), and then compiled down to a machine language (or assembly language) which is recognizable by the processor. Alternatively, a code developer can directly write assembly language, which is line-by-line usable by the processor. Writing and constructing code in a higher level language is usually much easier than directly writing assembly code, due to the structure afforded at the higher level. However, machine language that has been directly written, and not compiled from a higher level language, can be made to run much more efficiently on a processor. This is particularly true for processor intensive applications, such as digital signal processing. Accordingly, the code (or program) associated with a DSP is generally not written or developed in a higher level language. Instead, the code is carefully tailored and hand-optimized in order to increase processing efficiency and to reduce the amount of memory needed.
A dual processor configuration can also be employed where a second associated general purpose microprocessor unit (i.e., an MCU, having its own memory or external memory) is used for processing low-MIPS operations and protocol operations. As a result, fewer items need to be stored and/or processed on one processor versus another. The DSP, for instance, might have only certain hand-optimized code associated with the intensive real-time task of processing a signal. Accordingly, the associated memory for the DSP will be reduced.
Certain solutions exist to provide effective processing of programs (or data), in light of the reduced amount of memory available on the main processor. The use of overlays is one such solution. Overlays allow a program with large memory requirements to fit into a small memory footprint. For instance, a program might require more than 75 Kbytes words of RAM for storage, while a corresponding processor (DSP or the like) might have only 40 Kbytes of words. Overlays allow a portion of the code and data (plus constants) to be paged into the available memory space on an as-needed basis.
Overlays work by having a small wrapper routine present in a common area for the code. This wrapper routine is also referred to as a stub or proxy. When the wrapper is called, it causes the appropriate overlay code and data sections to be transferred into the reserve code and data areas in the main memory.
To illustrate certain aspects of overlays, FIG. 1 shows a representative prior art block diagram of certain code/data segments 100, and a memory area 120, associated with an overlay scheme. In this example, there are three code overlays 102, 104, and 106. For the data, two fill overlays are shown, with one data overlay divided (or shared) between two sections of code. A first half of the data overlay (shown as 108) is associated with code overlay 1 (102), wherein this code and data are collectively referred to as Overlay A (130). The other half of the data overlay (shown as 110) is associated with code overlay 2 (104), wherein this code and data are collectively referred to as Overlay B (140). The second full overlay (shown as the third data overlay 112) is associated with code overlay 3 (106), wherein this code and data are collectively referred to as Overlay C (150).
The memory is shown as 120 and is divided into areas containing common code and data 122, wrappers 124, a code overlay area 126, and a data overlay area 128. When one of the wrapper functions for a particular overlay is called, the wrapper function helps facilitate the transfer of the code/data for that overlay into the memory area 120, as shown generally by the arrows 152. For instance, if the wrapper function for overlay B (140) is called, the code overlay 2 (104) will be transferred into the code overlay area 126, and the data overlay 1/2 (110) will be transferred into the data overlay area 128. It is also possible for one overlay to call another overlay, with this arrangement generally referred to as nested overlays.
Prior implementations of overlays have used linker technology to create code and data segments that can be loaded into the processor memory area and executed. Such prior implementations, however, have been configured to use only a single copy of a data segment in the main memory area. If multiple parts of the algorithm code need to use that particular data, these parts will be referred to the single copy in memory. Moreover, only one single copy of a particular mathematical function (or the like) is stored in the main memory. When the particular function is called, the calling routine is referenced to the single copy of the function code for processing. This can be problematic in that a large portion of data or function code must be stored in main memory in order to be accessible by various functions or routines.
Instead, what is needed in the field is an overlaying mechanism to automatically cause data to be overlaid in a similar fashion as code. Accordingly, particular data can be isolated that belongs to a particular code section, and thereafter the data could be overlaid, along with the code, into a small memory area on a receiving processor.